/****************************************************************************
**
** Copyright (C) 2011 Jesús Martínez Pérez
**
** This program is free software: you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the 
** Free Software Foundation, either version 3 of the License, or (at your
** option) any later version.
**
** This program is distributed in the hope that it will be useful, but 
** WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
** or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
** for more details.
**
** You should have received a copy of the GNU General Public License along 
** with this program. If not, see <http://www.gnu.org/licenses/>
**
****************************************************************************/
/*
 * tabla.h
 *
 *		Created on: 22/05/2010
 *		Author: Jesús Martínez Pérez
 */
#ifndef _TABLA_H_
#define _TABLA_H_
#include <iostream>
#include <vbits.h>
using namespace std;
/**
 * \struct info
 *
 *
 * \brief	Esta estructura nos pemite tener un codigo y un vector de bits asociados
 *         
 *
 * \author Jesús Martínez Pérez 
 *
 *
 * \date $Date: 22/05/2010 $
 *
 */
struct info{
	int codigo;
	Vbits vb;
};
/**
 * \class tabla
 *
 *
 * \brief	Esta clase hace posible el uso de tablas, que nos proporcionarán los 
 				valores codigo y los vectores de bits necesarios para la codificación 
 				de las longitudes, distancias,así como de la codificación de Huffman 
 				para caracteres, símbolos de longitud y distancias.
 *         
 *
 * \author Jesús Martínez Pérez 
 *
 *
 * \date $Date: 22/05/2010 $
 *
 */
class tabla{
	private:
		info *tab;
	public:
/**
@brief Constructor por parámetro, crea un tipo de tabla según el valor introducido
@param[in] tipo El valor introducido, será un valor del 1 al 4 
*/
		tabla(int tipo);
/**
@brief Consulta el vector de bits asociado a un valor de una posicion que damos
@param[in] n El valor entero de la posicion que queremos consultar
@return Un vector de bits
*/	
		Vbits GetVb(int n)const;
/**
@brief Consulta el codigo asociado a una posicion que damos
@param[in] n El valor entero asociado a una posicion que queremos consultar
@return Un entero 
*/	
		int codigo(int n)const;
/**
@brief Consulta el objeto info al que está asociado una posicion que damos, lo 
			buscamos dentro del vector de info llamado tab
@param[in] pos El valor entero de la posicion que queremos consultar
@return Una estructura tipo info 
*/	
		info Gettab(int pos)const;
};
#endif
